package com.zs.java.newFeatures;

/**
 * @author madison
 * @description
 * @date 2021/5/26 10:53
 */
public class Test {
    public static void main(String[] args) {

        // 1.instanceof模式匹配
        Animal obj1 = new Cat();
        Animal obj2 = new Dog();

        System.out.println(obj1 instanceof Cat cat);
        System.out.println(obj1 instanceof Dog);


        if (obj1 instanceof Cat cat) {
//            Cat cat = (Cat)obj1;
            obj1.printName();
            cat.setAction("miao");
            System.out.println(cat.getAction());
            System.out.println(obj1.getClass());
        }

        // 2.Switch表达式
        // switch表达式后面的数据类型只能是byte,short，char，int四种整形类型
        // 枚举类型和java.lang.String类型（从java 7才允许），不能是boolean类型。
        String str = "test";
        // old way
        switch (str) {
            case "tests":
                System.out.println(str);
                break;
            default:
                System.out.println("end");
        }
        // new way
        switch (str) {
            case "test" -> System.out.println("test");
            case "2" -> System.out.println("2");
            default -> System.out.println("end");
        }

        // 3.记录类型（Record Type）的引入 (Second Preview) java16转正
        Point point = new Point(1, 2);
        System.out.println(point.x());
        System.out.println(point.y());

        // 4.文本块
        String html = """
                  <html>
                    <body>
                        <p>Hello, world</p>
                    </body>
                  </html>
                """;
        System.out.println(html);

        // 5.NullPointerException
        User user = new User(new Location());
        System.out.println(user.getLocation().getCity().getName());

        // 5.Sealed Classes (Preview)
        // 封闭类（预览特性），可以是封闭类和或者封闭接口，用来增强 Java 编程语言，防止其他类或接口扩展或实现它们。
//        public abstract sealed class Student permits ZhangSan, LiSi, ZhaoLiu {}
    }
}
